package com.zhoukx.netty.codec;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.util.concurrent.TimeUnit;

/**
 *  说明
 *   我们自定义一个handler 需要继续netty 规定好的某个HandlerAdaoter
 *   这是我们自定义一个Handler,才能称为Handler
 */
public class NettyServerHandler extends ChannelInboundHandlerAdapter {
    /**
     *    读取数据实际(这里我们可以读取客户端发送的消息)
     *
     * 1. ChannelHandlerContext 上下文对象,含通道pipepline,通道channel地址
     * 2. Object msg:就是客户端发送的数据 默认是Object
     * @param ctx
     * @param msg
     * @throws Exception
     */
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        // 读取从客户端发送的StudentPOJO.Student
        StudentPOJO.Student student = (StudentPOJO.Student) msg;

        System.out.println("客户端发送的数据 id="+ student.getId()+" 名字+"+student.getName());
    }

    /**
     *  数据读取完毕
     * @param ctx
     * @throws Exception
     */
    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        // 将数据写入到缓存,并刷新
        // 一般来讲,我们队发送的数据进行编码
        ctx.writeAndFlush(Unpooled.copiedBuffer(" Hello,客户端~",CharsetUtil.UTF_8));
    }

    /**
     *  发生异常处理
     * @param ctx
     * @param cause
     * @throws Exception
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
       ctx.close();
    }
}
